plot(data$x, data$y, xlab = x, ylab = y, xlim=c(xmin, xmax), ylim=c(ymin, ymax), col=rgb(0.0, 0.0, 0.0, 0.15), pch=20, labels=FALSE, xaxt='n', yaxt='n')
# points(front$x, front$y, col=rgb(0, 0, 1, 1), pch=1)
# choice set (A and B)
points(c(x1, x2), c(y1, y2), col=rgb(1, 0, 0, 1), pch=20)
}
op <- par(mfrow = c(2, 2)) # 2 x 2 pictures on one plot
#pty = "s")       # square plotting region, independent of device size
splot(data)
# pareto front
points(front$x, front$y, col=rgb(0, 0, 1, 1), pch=1)
# regression line
abline(l_fit, col=rgb(0, 0, 1, 0.5))
# pareto outliers
points(outliers$x, outliers$y, col=rgb(0, 0, 0, 0.15), pch=20)
points(outliers$x, outliers$y, col=rgb(0, 0, 1, 1), pch=4)
splot(data1)
splot(data2)
splot(data3)
####### Write csv files
csv1 <- data.frame(x = data1$x, y = data1$y)
csv1$choice <- ifelse(csv1$x == x1 & csv1$y == y1, 1, ifelse(csv1$x == x2 & csv1$y == y2, 2, 0))
filename <- paste(file, '2', '.csv', sep='')
write.csv(csv1, filename, row.names = FALSE)
csv2 <- data.frame(x = data2$x, y = data2$y)
csv2$choice <- ifelse(csv2$x == x1 & csv2$y == y1, 1, ifelse(csv2$x == x2 & csv2$y == y2, 2, 0))
filename <- paste(file, '1', '.csv', sep='')
write.csv(csv2, filename, row.names = FALSE)
# clean up R environment
rm(list = ls())
##########################################
# Dataset info
##########################################
#
# file <- "RealEstate"     # csv dataset filename. The file has to end with ".csv".
# sep <- ","               # csv separator
# doubleheader <- 0        # 0 if two header lines
# x <- "Size"              # name of x attribute (column in the csv)
# xdir <- 1                # direction of x: 1 = the higher the better, -1 = the lower the better
# y <- "Price"             # name of y attribute (column in the csv)
# ydir <- -1               # direction of y: 1 = the higher the better, -1 = the lower the better
file <- "Car"
sep <- ";"
doubleheader <- 1
x <- "Horsepower"
xdir <- 1
y <- "MPG"
ydir <- 1
# file <- "Cereal"
# sep <- ";"
# doubleheader <- 1
# x <- "sugars"
# xdir <- -1
# y <- "carbo"
# ydir <- -1
##########################################
# Global constants - change with caution
##########################################
# number of max standard deviations for outlier removal on axes.
# Set to 0 for no outlier removal.
outlier_zscore <- 2
# number of max standard deviations for outlier removal on the pareto front.
# Set to 0 for no outlier removal.
outlier_pareto_zscore <- 2
# proportion of decoys to remove, between 0 and 1
decoy_removal_ratio <- 0.8
# proportion of non-decoys to remove, between 0 and 1
nondecoy_removal_ratio <- 0.5
##########################################
# The data processing code
##########################################
####### 0 - Load the data
# Read the data file
filename <- paste(file, '.csv', sep='')
alldata <- read.csv(filename, sep=sep, header = TRUE, stringsAsFactors = FALSE)
# Delete the first row if two headers
if (doubleheader) {
alldata <- alldata[-1,]
}
# Plot all possible scatterplots:
# plot(data)
# Only keep the two selected attributes and rename them x and y
data <- data.frame(x = as.numeric(alldata[, x]), y = as.numeric(alldata[, y]))
cat("Loaded ", nrow(data), " data points.", sep='')
####### 1 - Remove duplicate points
nrow0 <- nrow(data)
data <- unique(data)
if (nrow(data) < nrow0) {
cat("Removed ", nrow0 - nrow(data), " duplicates.", sep='')
}
####### 2 - Remove outliers on x and y
if (outlier_zscore > 0) {
x_mean <- mean(data$x)
x_sd <- sd(data$x)
data$x_zscores <- (data$x - x_mean) / x_sd
y_mean <- mean(data$y)
y_sd <- sd(data$y)
data$y_zscores <- (data$y - y_mean) / y_sd
nrow0 <- nrow(data)
data <- subset(data, abs(x_zscores) < outlier_zscore & abs(y_zscores) < outlier_zscore)
if (nrow(data) < nrow0) {
cat("Removed ", nrow0 - nrow(data), " outliers on the x and y axes.", sep='')
}
}
####### 3 - Compute pareto points
computeParetoPoints <- function(data) {
# code from http://stackoverflow.com/questions/21294829/fast-calculations-of-the-pareto-front-in-r
xp <- -data$x * xdir # the code inverts costs
yp <- -data$y * ydir # the code inverts costs
pareto = 1:length(xp)
for(i in 1:length(xp)){
cond1 = yp[i]!=min(yp[which(xp==xp[i])])
cond2 = xp[i]!=min(xp[which(yp==yp[i])])
for(n in 1:length(xp)){
if((xp[i]>xp[n] & yp[i]>yp[n]) | (xp[i]==xp[n] & cond1) | (yp[i]==yp[n] & cond2)){
pareto[i] = NA
break
}
}
}
pareto
}
pareto <- computeParetoPoints(data)
data$pareto <- !is.na(pareto)
front <- subset(data, pareto)
front <- front[order(front$x),]
####### 4 - Remove pareto outliers
l_fit <- lm(front$y ~ front$x)
if (outlier_pareto_zscore > 0) {
front$sd_residual <- rstandard(l_fit)
outliers <- subset(front, abs(sd_residual) >= outlier_pareto_zscore)
if (nrow(outliers) > 0) {
for (i in 1:nrow(outliers)) {
outlier = outliers[i, ]
data <- subset(data, x != outlier$x & y != outlier$y)
}
# Recompute pareto front
pareto <- computeParetoPoints(data)
data$pareto <- !is.na(pareto)
front <- subset(data, pareto)
front <- front[order(front$x),]
# Recompute linear fit (for display)
l_fit <- lm(front$y ~ front$x)
cat("Removed ", nrow(outliers), " outliers on the pareto front.", sep='')
}
}
####### 5 - Compute optimal choice pair
bestscore <- 0
bestchoice1 <- 0
bestchoice2 <- 0
mid <- floor(nrow(front)/2)
for (choice1 in 1:nrow(front)) {
for (choice2 in choice1:nrow(front)) {
x1 <- front[choice1, ]$x
y1 <- front[choice1, ]$y
x2 <- front[choice2, ]$x
y2 <- front[choice2, ]$y
s1 <- subset(data, x*xdir >= x1*xdir | y*ydir >= y1*ydir)
s2 <- subset(data, x*xdir >= x2*xdir | y*ydir >= y2*ydir)
s1or2 <- subset(data, (x*xdir >= x1*xdir | y*ydir >= y1*ydir) | (x*xdir >= x2*xdir | y*ydir >= y2*ydir))
s1and2 <- subset(data, (x*xdir >= x1*xdir | y*ydir >= y1*ydir) & (x*xdir >= x2*xdir | y*ydir >= y2*ydir))
score <- (nrow(s1or2) - nrow(s1and2))
if (score > bestscore) {
bestscore <- score
bestchoice1 <- choice1
bestchoice2 <- choice2
}
}
}
choice1 <- bestchoice1
choice2 <- bestchoice2
x1 <- front[choice1, ]$x
y1 <- front[choice1, ]$y
x2 <- front[choice2, ]$x
y2 <- front[choice2, ]$y
####### 6 - Build subsets
set.seed(0)
data$rnd <- runif(nrow(data))
data$dom1 <- data$x*xdir <= x1*xdir & data$y*ydir <= y1*ydir
data$dom2 <- data$x*xdir <= x2*xdir & data$y*ydir <= y2*ydir
data0 <- subset(data, (dom1 | dom2) | pareto | rnd >= nondecoy_removal_ratio)
data1 <- subset(data0, !dom1 | pareto | rnd >= decoy_removal_ratio)
data2 <- subset(data0, !dom2 | pareto | rnd >= decoy_removal_ratio)
data3 <- subset(data0, (!dom1 & !dom2) | pareto | rnd >= decoy_removal_ratio)
####### Plot
xmin <- 0#min(data$x)
xmax <- max(data$x)
ymin <- 0#min(data$y)
ymax <- max(data$y)
splot <- function(data) {
# all points
plot(data$x, data$y, xlab = x, ylab = y, xlim=c(xmin, xmax), ylim=c(ymin, ymax), col=rgb(0.0, 0.0, 0.0, 0.15), pch=20, xaxt='n', yaxt='n')
# points(front$x, front$y, col=rgb(0, 0, 1, 1), pch=1)
# choice set (A and B)
points(c(x1, x2), c(y1, y2), col=rgb(1, 0, 0, 1), pch=20)
}
op <- par(mfrow = c(2, 2)) # 2 x 2 pictures on one plot
#pty = "s")       # square plotting region, independent of device size
splot(data)
# pareto front
points(front$x, front$y, col=rgb(0, 0, 1, 1), pch=1)
# regression line
abline(l_fit, col=rgb(0, 0, 1, 0.5))
# pareto outliers
points(outliers$x, outliers$y, col=rgb(0, 0, 0, 0.15), pch=20)
points(outliers$x, outliers$y, col=rgb(0, 0, 1, 1), pch=4)
splot(data1)
splot(data2)
splot(data3)
####### Write csv files
csv1 <- data.frame(x = data1$x, y = data1$y)
csv1$choice <- ifelse(csv1$x == x1 & csv1$y == y1, 1, ifelse(csv1$x == x2 & csv1$y == y2, 2, 0))
filename <- paste(file, '2', '.csv', sep='')
write.csv(csv1, filename, row.names = FALSE)
csv2 <- data.frame(x = data2$x, y = data2$y)
csv2$choice <- ifelse(csv2$x == x1 & csv2$y == y1, 1, ifelse(csv2$x == x2 & csv2$y == y2, 2, 0))
filename <- paste(file, '1', '.csv', sep='')
write.csv(csv2, filename, row.names = FALSE)
# clean up R environment
rm(list = ls())
##########################################
# Dataset info
##########################################
#
# file <- "RealEstate"     # csv dataset filename. The file has to end with ".csv".
# sep <- ","               # csv separator
# doubleheader <- 0        # 0 if two header lines
# x <- "Size"              # name of x attribute (column in the csv)
# xdir <- 1                # direction of x: 1 = the higher the better, -1 = the lower the better
# y <- "Price"             # name of y attribute (column in the csv)
# ydir <- -1               # direction of y: 1 = the higher the better, -1 = the lower the better
file <- "Car"
sep <- ";"
doubleheader <- 1
x <- "Horsepower"
xdir <- 1
y <- "MPG"
ydir <- 1
# file <- "Cereal"
# sep <- ";"
# doubleheader <- 1
# x <- "sugars"
# xdir <- -1
# y <- "carbo"
# ydir <- -1
##########################################
# Global constants - change with caution
##########################################
# number of max standard deviations for outlier removal on axes.
# Set to 0 for no outlier removal.
outlier_zscore <- 2
# number of max standard deviations for outlier removal on the pareto front.
# Set to 0 for no outlier removal.
outlier_pareto_zscore <- 2
# proportion of decoys to remove, between 0 and 1
decoy_removal_ratio <- 0.8
# proportion of non-decoys to remove, between 0 and 1
nondecoy_removal_ratio <- 0.5
##########################################
# The data processing code
##########################################
####### 0 - Load the data
# Read the data file
filename <- paste(file, '.csv', sep='')
alldata <- read.csv(filename, sep=sep, header = TRUE, stringsAsFactors = FALSE)
# Delete the first row if two headers
if (doubleheader) {
alldata <- alldata[-1,]
}
# Plot all possible scatterplots:
# plot(data)
# Only keep the two selected attributes and rename them x and y
data <- data.frame(x = as.numeric(alldata[, x]), y = as.numeric(alldata[, y]))
cat("Loaded ", nrow(data), " data points.", sep='')
####### 1 - Remove duplicate points
nrow0 <- nrow(data)
data <- unique(data)
if (nrow(data) < nrow0) {
cat("Removed ", nrow0 - nrow(data), " duplicates.", sep='')
}
####### 2 - Remove outliers on x and y
if (outlier_zscore > 0) {
x_mean <- mean(data$x)
x_sd <- sd(data$x)
data$x_zscores <- (data$x - x_mean) / x_sd
y_mean <- mean(data$y)
y_sd <- sd(data$y)
data$y_zscores <- (data$y - y_mean) / y_sd
nrow0 <- nrow(data)
data <- subset(data, abs(x_zscores) < outlier_zscore & abs(y_zscores) < outlier_zscore)
if (nrow(data) < nrow0) {
cat("Removed ", nrow0 - nrow(data), " outliers on the x and y axes.", sep='')
}
}
####### 3 - Compute pareto points
computeParetoPoints <- function(data) {
# code from http://stackoverflow.com/questions/21294829/fast-calculations-of-the-pareto-front-in-r
xp <- -data$x * xdir # the code inverts costs
yp <- -data$y * ydir # the code inverts costs
pareto = 1:length(xp)
for(i in 1:length(xp)){
cond1 = yp[i]!=min(yp[which(xp==xp[i])])
cond2 = xp[i]!=min(xp[which(yp==yp[i])])
for(n in 1:length(xp)){
if((xp[i]>xp[n] & yp[i]>yp[n]) | (xp[i]==xp[n] & cond1) | (yp[i]==yp[n] & cond2)){
pareto[i] = NA
break
}
}
}
pareto
}
pareto <- computeParetoPoints(data)
data$pareto <- !is.na(pareto)
front <- subset(data, pareto)
front <- front[order(front$x),]
####### 4 - Remove pareto outliers
l_fit <- lm(front$y ~ front$x)
if (outlier_pareto_zscore > 0) {
front$sd_residual <- rstandard(l_fit)
outliers <- subset(front, abs(sd_residual) >= outlier_pareto_zscore)
if (nrow(outliers) > 0) {
for (i in 1:nrow(outliers)) {
outlier = outliers[i, ]
data <- subset(data, x != outlier$x & y != outlier$y)
}
# Recompute pareto front
pareto <- computeParetoPoints(data)
data$pareto <- !is.na(pareto)
front <- subset(data, pareto)
front <- front[order(front$x),]
# Recompute linear fit (for display)
l_fit <- lm(front$y ~ front$x)
cat("Removed ", nrow(outliers), " outliers on the pareto front.", sep='')
}
}
####### 5 - Compute optimal choice pair
bestscore <- 0
bestchoice1 <- 0
bestchoice2 <- 0
mid <- floor(nrow(front)/2)
for (choice1 in 1:nrow(front)) {
for (choice2 in choice1:nrow(front)) {
x1 <- front[choice1, ]$x
y1 <- front[choice1, ]$y
x2 <- front[choice2, ]$x
y2 <- front[choice2, ]$y
s1 <- subset(data, x*xdir >= x1*xdir | y*ydir >= y1*ydir)
s2 <- subset(data, x*xdir >= x2*xdir | y*ydir >= y2*ydir)
s1or2 <- subset(data, (x*xdir >= x1*xdir | y*ydir >= y1*ydir) | (x*xdir >= x2*xdir | y*ydir >= y2*ydir))
s1and2 <- subset(data, (x*xdir >= x1*xdir | y*ydir >= y1*ydir) & (x*xdir >= x2*xdir | y*ydir >= y2*ydir))
score <- (nrow(s1or2) - nrow(s1and2))
if (score > bestscore) {
bestscore <- score
bestchoice1 <- choice1
bestchoice2 <- choice2
}
}
}
choice1 <- bestchoice1
choice2 <- bestchoice2
x1 <- front[choice1, ]$x
y1 <- front[choice1, ]$y
x2 <- front[choice2, ]$x
y2 <- front[choice2, ]$y
####### 6 - Build subsets
set.seed(0)
data$rnd <- runif(nrow(data))
data$dom1 <- data$x*xdir <= x1*xdir & data$y*ydir <= y1*ydir
data$dom2 <- data$x*xdir <= x2*xdir & data$y*ydir <= y2*ydir
data0 <- subset(data, (dom1 | dom2) | pareto | rnd >= nondecoy_removal_ratio)
data1 <- subset(data0, !dom1 | pareto | rnd >= decoy_removal_ratio)
data2 <- subset(data0, !dom2 | pareto | rnd >= decoy_removal_ratio)
data3 <- subset(data0, (!dom1 & !dom2) | pareto | rnd >= decoy_removal_ratio)
####### Plot
xmin <- 0#min(data$x)
xmax <- max(data$x)
ymin <- 0#min(data$y)
ymax <- max(data$y)
splot <- function(data) {
# all points
plot(data$x, data$y, xlab = x, ylab = y, xlim=c(xmin, xmax), ylim=c(ymin, ymax), col=rgb(0.0, 0.0, 0.0, 0.15), pch=20, xaxt='n', yaxt='n')
# points(front$x, front$y, col=rgb(0, 0, 1, 1), pch=1)
# choice set (A and B)
points(c(x1, x2), c(y1, y2), col=rgb(1, 0, 0, 1), pch=20)
}
#op <- par(mfrow = c(2, 2)) # 2 x 2 pictures on one plot
#pty = "s")       # square plotting region, independent of device size
splot(data)
# pareto front
points(front$x, front$y, col=rgb(0, 0, 1, 1), pch=1)
# regression line
abline(l_fit, col=rgb(0, 0, 1, 0.5))
# pareto outliers
points(outliers$x, outliers$y, col=rgb(0, 0, 0, 0.15), pch=20)
points(outliers$x, outliers$y, col=rgb(0, 0, 1, 1), pch=4)
#splot(data1)
#splot(data2)
#splot(data3)
####### Write csv files
csv1 <- data.frame(x = data1$x, y = data1$y)
csv1$choice <- ifelse(csv1$x == x1 & csv1$y == y1, 1, ifelse(csv1$x == x2 & csv1$y == y2, 2, 0))
filename <- paste(file, '2', '.csv', sep='')
write.csv(csv1, filename, row.names = FALSE)
csv2 <- data.frame(x = data2$x, y = data2$y)
csv2$choice <- ifelse(csv2$x == x1 & csv2$y == y1, 1, ifelse(csv2$x == x2 & csv2$y == y2, 2, 0))
filename <- paste(file, '1', '.csv', sep='')
write.csv(csv2, filename, row.names = FALSE)
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/.active-rstudio-document')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/.active-rstudio-document')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/.active-rstudio-document')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/.active-rstudio-document')
source('~/Work/newdecoy/Exp2/R scatterplot generation/decoy.R')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
source('~/.active-rstudio-document')
